package com.tinyengine.it.tool;

import cn.hutool.core.io.FileUtil;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;

/**
 * 模板类处理器
 *
 * @author 刘平
 * @date 2025/04/14 12:03
 */
@Slf4j
public class TemplateClassProcessor {

    /**
     * cfg
     */
    private static final Configuration cfg;

    static {
        cfg = new Configuration();
        // 设置模板加载路径（相对于resources根目录）
        cfg.setClassForTemplateLoading(TemplateClassProcessor.class, FileUtil.FILE_SEPARATOR + "template" + FileUtil.FILE_SEPARATOR + "class");
        cfg.setDefaultEncoding("UTF-8");
    }

    /**
     * 流程模板
     *
     * @param templateName 模板名称
     * @param data         数据
     * @param outFile      出文件
     */
    public static void processTemplate(String templateName, Map<String, Object> data, File outFile) {
        try {
            FileWriter outputPath = new FileWriter(outFile);
            Template template = cfg.getTemplate(templateName);
            //输出到文件
            template.process(data, outputPath);
            outputPath.close();
            log.info("生成Java项目文件完成,目标名称:{},输出路径:{}", templateName, outFile.getAbsolutePath());
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TemplateException e) {
            throw new RuntimeException(e);
        }
    }
}